﻿using GiveMeMenu.Service.ObjectModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace GiveMeMenu.Service.DataLayer
{
    public interface IGMMDataAccessLayer
    {
        /// <summary>
        /// Gets all dishs.
        /// </summary>
        /// <returns></returns>
        IList<Dish> GetAllDishs();

        /// <summary>
        /// Removes the order.
        /// </summary>
        /// <param name="p">The p.</param>
        /// <returns></returns>
        bool RemoveOrder(int OId);

        /// <summary>
        /// Removes the order information.
        /// </summary>
        /// <param name="p">The p.</param>
        /// <returns></returns>
        bool RemoveOrderInformation(int OId);

        /// <summary>
        /// Gets the dish today.
        /// </summary>
        /// <param name="list">The list.</param>
        /// <returns></returns>
        IList<Dish> GetDishToday();

        /// <summary>
        /// Adds the dish.
        /// </summary>
        /// <param name="oId">The o id.</param>
        /// <param name="name">The name.</param>
        /// <param name="price">The price.</param>
        /// <param name="orderDate">The order date.</param>
        /// <param name="descrption">The descrption.</param>
        /// <param name="discount">The discount.</param>
        /// <returns></returns>
        bool AddDish(Dish dish);

        /// <summary>
        /// Adds the order.
        /// </summary>
        /// <param name="oId">The o id.</param>
        /// <param name="typeId">The type id.</param>
        /// <returns></returns>
        bool AddOrder(Order order);

        /// <summary>
        /// Adds the order information.
        /// </summary>
        /// <param name="oId">The o id.</param>
        /// <param name="typeId">The type id.</param>
        /// <param name="dishId">The dish id.</param>
        /// <returns></returns>
        bool AddOrderInformation(OrderInformation info);

        /// <summary>
        /// Addlus the table.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <returns></returns>
        bool AddluTable(LuTable luTable);

        /// <summary>
        /// Addlus the type dish.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <returns></returns>
        bool AddluTypeDish(LuTypeDish luTypeDish);

        /// <summary>
        /// Getlus the tables.
        /// </summary>
        /// <returns></returns>
        IList<LuTable> GetluTables();

        /// <summary>
        /// Getlus the type dish.
        /// </summary>
        /// <returns></returns>
        IList<LuTypeDish> GetluTypeDish();

        /// <summary>
        /// Gets the order information by order id.
        /// </summary>
        /// <param name="orderOId">The order O id.</param>
        /// <returns></returns>
        IList<OrderInformation> GetOrderInformationByOrderId(int orderOId);

        /// <summary>
        /// Removes the dish.
        /// </summary>
        /// <param name="oId">The o id.</param>
        /// <returns></returns>
        bool RemoveDish(int oId);

        /// <summary>
        /// Removelus the table.
        /// </summary>
        /// <param name="oId">The o id.</param>
        /// <returns></returns>
        bool RemoveluTable(int oId);

        /// <summary>
        /// Removelus the type dish.
        /// </summary>
        /// <param name="oId">The o id.</param>
        /// <returns></returns>
        bool RemoveluTypeDish(int oId);

        /// <summary>
        /// Updates the dish.
        /// </summary>
        /// <param name="typeId">The type id.</param>
        /// <param name="name">The name.</param>
        /// <param name="price">The price.</param>
        /// <param name="orderDate">The order date.</param>
        /// <param name="description">The description.</param>
        /// <param name="discount">The discount.</param>
        /// <returns></returns>
        bool UpdateDish(Dish dish);

        /// <summary>
        /// Updatelus the table.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <returns></returns>
        bool UpdateluTable(LuTable luTable);

        /// <summary>
        /// Updatelus the type dish.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <returns></returns>
        bool UpdateluTypeDish(LuTypeDish luTypeDish);

        /// <summary>
        /// Updates the order.
        /// </summary>
        /// <param name="oId">The o id.</param>
        /// <param name="tableId">The table id.</param>
        /// <param name="confirmOrder">if set to <c>true</c> [confirm order].</param>
        /// <returns></returns>
        bool UpdateOrder(Order order);
    }
}
